package com.tailyou.hms.firstapp.act;

import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.os.SystemClock;
import android.util.Log;
import android.widget.ImageView;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;

import com.tailyou.hms.firstapp.R;

import java.io.IOException;
import java.net.URL;

/**
 * 1.主线程不能做耗时操作，时间超过5秒，系统会报ANR（Application No Response），因此，耗时任务需要放到子线程中进行
 * 2.子线程中不能直接操作UI，，子线程完成耗时任务后，如果需要更新UI，需要借助线程之间的通信，通知UI线程更新UI
 */
public class ThrConnActivity extends AppCompatActivity {

    private ImageView ivPicNet, ivPicLocal;
    private Drawable drawable;

    private Handler handler = new Handler(Looper.getMainLooper()) {
        @Override
        public void handleMessage(@NonNull Message msg) {
            super.handleMessage(msg);
            if (msg.arg1 == 100){
                // 按照事先约定，arg1 == 100 表示图片下载完成
                ivPicNet.setImageDrawable(drawable);
            }
        }
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_thread_conn);
        // findViewById 找到UI控件
        ivPicNet = findViewById(R.id.ivPicNet);
        ivPicLocal = findViewById(R.id.ivPicLocal);
        // 打印线程ID，此处输出UI线程ID
        Log.d("THR", "线程ID：" + android.os.Process.myTid());
        // 从网络下载图片
        // 耗时任务，需要在子线程中执行，否则会阻塞UI线程，影响后面代码的执行
        loadPicFromNet();
        // 设置本地图片
        ivPicLocal.setImageResource(R.mipmap.user);
    }

    private void loadPicFromNet() {
        new Thread(new Runnable() {
            @Override
            public void run() {
                // 打印线程ID，此处输出子线程ID
                Log.d("THR", "线程ID：" + android.os.Process.myTid());
                // 模拟耗时任务
                SystemClock.sleep(5000);
                try {
                    // 从网络地址下载图片
                    drawable = Drawable.createFromStream(new URL("http://wwww.baidu.com/img/baidu_logo.gif").openStream(),"image.gif");
                }catch (IOException e){
                    e.printStackTrace();
                }
                if (drawable == null){
                    Log.d("ThrConnActivity","图片下载失败");
                }else {
                    // 图片下载成果，耗时任务完成，通知UI线程更新UI
                    Message message = new Message();
                    // 发送消息和处理消息，通过arg1参数保证对应关系
                    // 约定arg1 == 100，表示图片下载完成
                    message.arg1 = 100;
                    handler.sendMessage(message);
                }
            }
        }).start();
    }

}